// import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
// import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
// import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl;
// import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../OracleSQLObjectImpl.h"

class SearchClause_Type
{
public:
  static SearchClause_Type_ptr DEPTH;
  static SearchClause_Type_ptr BREADTH;

  string_ptr name;
  uint64_t mask;
  SearchClause_Type(uint64_t mask, string_ptr name);
  static SearchClause_Type_ptr valueOf(string_ptr name_);
};

class SearchClause : virtual public OracleSQLObjectImpl
{
public:
  SearchClause_Type_ptr type;

  SQLSelectOrderByItem_list_ptr items;

  SQLIdentifierExpr_ptr orderingColumn;
  
  SearchClause();
  SHAREDOBJECT(SearchClause);
  SearchClause_Type_ptr getType();

  void setType(SearchClause_Type_ptr type);

  SQLSelectOrderByItem_list_ptr getItems();

  void addItem(SQLSelectOrderByItem_ptr item);

  SQLIdentifierExpr_ptr getOrderingColumn();

  void setOrderingColumn(SQLIdentifierExpr_ptr orderingColumn);

  // @Override
  void accept0(OracleASTVisitor_ptr visitor);

  SQLObject_ptr clone();
};
